package com.popo.json;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class WeatherJson {
	public static void main(String[] args) {
		// String simpJson =
		// "{\"weatherinfo\":{\"city\":\"����\",\"cityid\":\"101010100\",\"temp\":\"14\",\"WD\":\"����\",\"WS\":\"2��\",\"SD\":\"69%\",\"WSE\":\"2\",\"time\":\"13:00\",\"isRadar\":\"1\",\"Radar\":\"JC_RADAR_AZ9010_JB\"}}";
		String simpJson = "{'a':[{'b':'b1','c':'c1'},{'b':'b2','c':'c2'}]}";
		StringBuilder source= new StringBuilder();
		File file = new File("E:/liuliboworkspace/MyJ2SETest/165247.txt");
		if(file.exists()){
			try {
				FileReader fileReader = new FileReader(file);
				char[] c = new char[(int) file.length()];
				try {
					fileReader.read(c, 0, (int) file.length());
					source.append(c);
					System.out.println("source="+source);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		System.out.println("-------------------------------------");
	
		JSONObject jsonObject;
		
//		String jsonsource= "{'entity':{'housePrice':277,'isSlabShow':2,'deposit':null,'bigAreaCodeName':'宝安','houseAge':7,'cityCode':900003,'targetNo':null,'utype':1,'houseOri':2,'uploadcommodelfiletext':'-1,-1','liveDateStr':null,'uploadcommpicfile':'','uploadpropertypicfiletext':'-1,-1,-1','insertTime':'2011-07-14 11:27:58','userId':25,'userName':'William','minMonth':null,'updateTimeStr':'2011-07-31 19:33:33','rentPrice':0,'coverImageStr':'http://img0.zushou365.com/900003/2810/2810769658/0/b542d66cd551a2fd9a878decfe27c95e8944d_s.jpg','coverImage':'http://img0.zushou365.com/900003/2810/2810769658/0/b542d66cd551a2fd9a878decfe27c95e8944d_s.jpg','fitmentType':4,'trafficInfo':'河东车站319路 338路 794路 K354路 宝安体育馆站368路 625路 632路 776路 B633','imageServer':1,'lon':22.5658,'structure':3,'publishTime':'2011-07-31 19:38:53','updateTime':'2011-07-31 19:33:33','cityCodeName':'深圳','liveAreaNum':'90','canPublish':true,'paymentTerm':null,'manageFee':2,'aroundCondition':'大学：深圳广播电视大学、中山大学公共管理硕士（ＭＰＡ）研究生教学点、广州大学纺织服装学院服装专业实训基地、深圳市广播电视大学宝安分校远程培训点\r\n中小学：宝丰小学、宝华学校、翻身实验学校、海滨中学\r\n幼儿园：天翔幼儿园\r\n商场：天虹商场、富年华百货、家家乐百货、万众百货、富年华购物广场\r\n邮局：径贝邮局\r\n银行：招商银行新安支行、ＡＴＭ（农业银行）、中国银行新安支行、深圳发展银行宝城支行、交通银行宝城支行\r\n医院：深圳市第八人民医院、西乡人民医院、西乡人民医院河东门诊部\r\n其他：宝安体育中心、宝安网球场、宝安赛格广场','houseVersion':3,'kitchenNum':1,'uploadcommodelfiletitle':'房型图,房型图','communityCode':'2810170989','smallAreaCodename':'宝安中心区','payType':2,'uploadcommpicfiletitle':'','detailText':'1.此房是富通苑的，房子朝向：南，采光和通风都非常好，房间使用率高，装修简约时尚.\r\n2.小区内绿化率面积大，居民素质高，物业管理规范。生活非常方便，地处生活区中心，\r\n周边设施：大学：深圳广播电视大学、中山大学公共管理硕士（ＭＰＡ）研究生教学点、广州大学纺织服装学院服装专业实训基地、深圳市广播电视大学宝安分校远程培训点中小学：宝丰小学、宝华学校、翻身实验学校、海滨中学幼儿园：天翔幼儿园商场：天虹商场、富年华百货、家家乐百货、万众百货、富年华购物广场邮局：径贝邮局银行：招商银行新安支行、ＡＴＭ（农业银行）、中国银行新安支行、深圳发展银行宝城支行、交通银行宝城支行医院：深圳市第八人民医院、西乡人民医院、西乡人民医院河东门诊部其他：宝安体育中心、宝安网球场、宝安赛格广场。\r\n3.保值升值潜力分析：价值取决于稀缺性，取决于不可替代性，物以稀为贵!{富通苑的一切设计都是围绕适合居住这个核心。家家有景的景观设计，九成以上的业主都是自己居住。它的这些不可替代的特点决定了它的品质，也注定了它的价值；随着城市的飞速发展，在未来的五到十年内，富通苑注定将被更多的有识之士所了解认可，现在能够有机会拥有这样的房子，确实是一件可遇而不可求的事情，得之，我幸！不要犹豫，马上走进揭开它的面纱，解答你的疑惑。\r\n4.最后请允许我衷心祝您早日买到称心如意的好房子，如果您对这套房子有兴趣可以联系我，或是想买一套其他户型的房子也都可以，我们产掌握了富通苑及周边的出售的很多房源，相信定有适合你需求的那套。','isRent':2,'buildType':1,'floorType':2,'publishFirstTime':'2011-07-19 09:27:38','hasElevator':1,'floorCells':2,'landRemark':'','liveDate':null,'smallAreaCode':507,'countSucceedSize':2,'id':165247,'lookTime':3,'proName':'普通住宅125平阳光充足,治安全面','isSlabDelete':1,'uploadpropertypicfiletitle':'小区图,小区图,小区图','houseRight':1,'uploadcommpicfiletext':'','toiletNum':2,'roomNum':3,'priceTexed':277,'floorNum':18,'publish':1,'detailKeyword':'富通苑[宝安-宝安中心区]','userDefine':'11260582','lat':113.885,'isDolmus':null,'areaNum':'125','publishRefreshCount':1,'infoCode':'012345678922','insertTimeStr':'2011-07-14 11:27:58','publishTimeStr':'2011-07-31 19:38:53','canRefresh':1,'proFloor':13,'hallNum':2,'bigAreaCode':462,'address':'宝安48区上川路','stype':1,'hasInnerFloor':2,'buildDate':2004,'balconyNum':2,'commName':'富通苑','uploadpropertypicfile':'http://img0.zushou365.com/900003/2810/2810769658/0/e4e77f2d89ee620aa5411c6ac17412f9b4cd9ac_s.jpg,http://img0.zushou365.com/900003/2810/2810769658/0/b542d66cd551a2fd9a878decfe27c95e8944d_s.jpg,xq_pics/20101218/0943/094315413241381_s.jpeg','expireDays':4,'uploadcommodelfile':'fx_pics/20101218/0944/094407374417692_s.jpeg,fx_pics/20110303/1933/193313931454233_s.jpeg','todayRefresh':false},'command':{'timestamp':null,'id':165247,'userId':25,'method':'','format':'json','type':'','auth':'247c3ee72139b986e39b0bc6b2bc310b'}}";
		try {
			jsonObject = new JSONObject(source.toString());
			
			String s = (String) jsonObject.get("zushou365");
//			System.out.println("s="+s);
			
			JSONObject sonJsonObject = new JSONObject(s);
			Object o = getData(sonJsonObject);
			System.out.println("housePrice="+((Map<String,Object>)((Map<String,Object>)o).get("entity")).get("housePrice"));
//			System.out.println("over "+o);
			//print(o);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

	private static void print(Object o) {
		// TODO Auto-generated method stub
		if (o instanceof Map) {
			@SuppressWarnings("unchecked")
			Set<Object> keys = ((Map<Object, Object>) o).keySet();
			Iterator<Object> iterator = keys.iterator();
			while (iterator.hasNext()) {
				Object key = iterator.next();
				System.out.println(key);
				@SuppressWarnings("unchecked")
				Object next=((Map<Object, Object>) o).get(key);
				if (next instanceof Map) {
					print(next);
				} else if (next instanceof List) {
					printArray(((List<?>) next).toArray());
				} else if (next instanceof Object[]) {
					printArray((Object[]) next);
				}else{
					System.out.println(next);
					
				}
			}

		} else if (o instanceof Map) {
			printArray(((List<?>) o).toArray());
		} else if (o instanceof List) {
			printArray(((List<?>) o).toArray());
		} else if (o instanceof Object[]) {
			
			printArray((Object[]) o);
			
		}else{
			System.out.println(o);
		}
	}

	private static void printArray(Object[] array) {
		// TODO Auto-generated method stub
		int len = ((Object[]) array).length;
		Object[] oo = (Object[]) array;
		for(int i=0;i<len;i++){
			System.out.println(oo[i].toString());
		}

	}

	static Object getData(JSONObject json) {
		// TODO Auto-generated method stub

		HashMap<String, Object> data = new HashMap<String, Object>();
		Iterator<String> keys = json.keys();
		while (keys.hasNext()) {
			String key = keys.next().toString();
			Object son;
			try {
				son = json.get(key);
				if (son instanceof JSONObject) {
					// �Ӳ�ѯ���JSONObject �ݹ����
					Object sonObject = getData((JSONObject) son);
					data.put(key, sonObject);
				} else if (son instanceof JSONArray) {

					data.put(key, parseJsonArray((JSONArray) son));
				} else {
					data.put(key, son);
				}
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				data.put(key, null);
			}

		}

		return data;

	}

	private static Object parseJsonArray(JSONArray son) {
		// TODO Auto-generated method stub

		int length = son.length();
		Object[] ro = new Object[length];
		for (int i = 0; i < length; i++) {
			Object o;
			try {
				o = son.get(i);
				if (o instanceof JSONObject) {
					ro[i] = getData((JSONObject) o);
				} else if (o instanceof JSONArray) {
					ro[i] = parseJsonArray((JSONArray) o);
				} else {
					ro[i] = o.toString();
				}
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

		return ro;
	}
}
